﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Eventos;
using Entidades.Eventos;

public partial class Eventos_frmRegistrarReserva : System.Web.UI.Page
{

  
    protected void Page_Load(object sender, EventArgs e)
    {
        cancelar.ServerClick += new EventHandler(cancelar_ServerClick);
        guardar.ServerClick += new EventHandler(guardar_ServerClick);

        EveEvento eveEvento = null;
 
        //eveEvento
        var eveEventoTmp = Session["eventoModificar"];
        if (eveEventoTmp == null)
        {
            int idEvento = Convert.ToInt32(Request.QueryString["idEvento"]); 
            eveEvento = EveEventoBLL.buscar(idEvento);
            Session["eventoModificar"] = eveEvento;
            Session["listaProductosEvento"] = eveEvento.Eve_Producto_evento.ToList();
        }
        else
        {
            eveEvento = (EveEvento)eveEventoTmp;
        }

        var eveProductoEventoListTmp = Session["listaProductosEvento"];


        if (eveProductoEventoListTmp != null)
            fillProductsInformation((List<EveProductoEvento>)eveProductoEventoListTmp);

        if (!Page.IsPostBack)
        {
            fillEventoInformation(eveEvento);
        }
        
        
    }

    void cancelar_ServerClick(object sender, EventArgs e)
    {
        Session["listaProductosEvento"] = null;
        Session.RemoveAll();
        Response.Redirect("frmGestionarEvento.aspx");
    }

    void guardar_ServerClick(object sender, EventArgs e)
    {
        EveEvento eveEvento = new EveEvento();
        //falta agregar catalogo
        eveEvento.nombre = nombre.Value;
        eveEvento.observacion = observacion.Value;
        eveEvento.idEvento = ((EveEvento)Session["eventoModificar"]).idEvento;
        eveEvento.idTipoEvento = Convert.ToInt32(selectTipoEvento.Value);
        eveEvento.estado = selectEstado.Value == "0" ? false : true;
        eveEvento.duracion = duracion.Value;

        List<EveProductoEvento> eveProductoEventoList = new  List<EveProductoEvento>();

        List<EveProductoEvento> eveProductoEventoListTmp = (List<EveProductoEvento>)Session["listaProductosEvento"];

        foreach (EveProductoEvento item in eveProductoEventoListTmp)
        {
            //buscamos las cantidades y los subtotales
            decimal descuento = 0M;
            foreach (TableRow tr in tablaProductos.Controls)
            {
                foreach (TableCell tc in tr.Controls)
                {
                    if (tc.ID == "descuentotc"+item.idProducto)
                    {
                        ControlCollection controles = tc.Controls;
                        if (controles.Count > 0)
                        {
                            if (tc.Controls[0] is TextBox)
                            {
                                TextBox textBox = (TextBox)tc.Controls[0];
                                descuento = Convert.ToDecimal(textBox.Text);
                            }
                        }
                        goto AgregarProducto;
                    }
                }
            }

        AgregarProducto:
            EveProductoEvento eveProductoEvento = new EveProductoEvento();
            eveProductoEvento.idProducto = item.idProducto;
            eveProductoEvento.descuento = descuento;
            eveProductoEvento.idEvento = eveEvento.idEvento;
            eveProductoEventoList.Add(eveProductoEvento);
        }

        eveEvento.Eve_Producto_evento = eveProductoEventoList;
        eveEvento.modificar();
        Session.RemoveAll();
        Response.Redirect("frmGestionarEvento.aspx");
        
    }

    void fillEventoInformation(EveEvento eveEvento)
    {
        nombre.Value = eveEvento.nombre;
        observacion.Value = eveEvento.observacion;
        selectTipoEvento.Value = eveEvento.idTipoEvento.ToString();
        duracion.Value = eveEvento.duracion;
        selectEstado.Value = eveEvento.estado == true ? "1" : "0";
    }

    void fillProductsInformation(List<EveProductoEvento> eveProductoEventoListTmp)
    {
        bool inicio = !Page.IsPostBack;
        //fill products table
        foreach (EveProductoEvento eveProductoEvento in eveProductoEventoListTmp)
        {
            TableRow tr1 = new TableRow();

            TableCell tc1 = new TableCell(); //Nombre Producto
            Label lbl1 = new Label();
            lbl1.Text = eveProductoEvento.Eve_Producto.nombre;
            tc1.Controls.Add(lbl1);

            TableCell tc2 = new TableCell(); //Nombre Producto
            Label lbl2 = new Label();
            lbl2.Text = eveProductoEvento.Eve_Producto.monto.Value.ToString("0.00");
            tc2.Controls.Add(lbl2);

            TableCell tc3 = new TableCell(); //Precio
            tc3.ID = "descuentotc" + eveProductoEvento.Eve_Producto.idProducto;
            TextBox txtDescuento = new TextBox();

            if (inicio)
                txtDescuento.Text = eveProductoEvento.descuento.ToString();
            else
                txtDescuento.Text = Request.Form["descuento" + eveProductoEvento.Eve_Producto.idProducto];


            txtDescuento.TextChanged += new EventHandler(txtDescuento_TextChanged);
            txtDescuento.Attributes.Add("runat", "server");
            txtDescuento.Attributes.Add("onchange", "__doPostBack('txtDescuento_TextChanged','')");
            txtDescuento.ID = "descuento" + eveProductoEvento.Eve_Producto.idProducto;
            tc3.Controls.Add(txtDescuento);

            TableCell tc4 = new TableCell(); //Precio Final
            tc4.ID = "precioFinal" + eveProductoEvento.Eve_Producto.idProducto;
            Label lbl4 = new Label();
            if (inicio)
                lbl4.Text = (eveProductoEvento.Eve_Producto.monto - eveProductoEvento.descuento).ToString();
            else
                txtDescuento.Text = (Convert.ToDecimal(Request.Form["descuento" + eveProductoEvento.Eve_Producto.idProducto]) - eveProductoEvento.descuento).Value.ToString("0.00");
            
            tc4.Controls.Add(lbl4);
            
            tr1.Cells.Add(tc1);
            tr1.Cells.Add(tc2);
            tr1.Cells.Add(tc3);
            tr1.Cells.Add(tc4);

            tablaProductos.Rows.Add(tr1);
        }
    }

    protected void txtDescuento_TextChanged(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        int idProducto = Convert.ToInt32(textBox.ID.Replace("descuento", ""));

        var productoListTmp = Session["listaProductosEvento"];
        EveProductoEvento eveProductoEvento = null;
        if (productoListTmp != null)
        {
            List<EveProductoEvento> productoList = (List<EveProductoEvento>)productoListTmp;
            eveProductoEvento = productoList.Where(pe => pe.idProducto == idProducto).FirstOrDefault();
        }

        foreach (TableRow tr in tablaProductos.Controls)
        {
            foreach (TableCell tc in tr.Controls)
            {

                if (tc.ID != null && tc.ID.Contains("precioFinal" + idProducto))
                {
                       ControlCollection controles = tc.Controls;
                       if (controles.Count > 0)
                       {
                           if (tc.Controls[0] is Label)
                           {
                               Label label = (Label)tc.Controls[0];
                               label.Text = (eveProductoEvento.Eve_Producto.monto - Convert.ToDecimal(textBox.Text)).ToString();
                           }
                       }
                }
            }               
        }
    }


   
}